<?php
/**
* Класс-помошник для работы с датой и временем
*
* @author Larein
* @version 1.0.0 / 21.07.2011
*/
class HDateTime
{
    /**
    * Возвращает отформатированную дату в удобочитаемом виде
    * пример: 21 июля 2011 
    * 
    * @param int $time          время (timestamp)
    * @param mixed $format      формат даты
    * @param mixed $cutYear     обрезать год
    * 
    * @return string
    */
    public static function formatDate($time = '', $format = 'j M Y', $cutYear = true) 
    {
        if(empty($time)) 
        {
            $time = time();
        }
        
        if($cutYear && date('Y') == date('Y', $time)) 
        {
            $format = preg_replace('/o|y|Y/', '', $format);    
        } 
        
        $month = abs(date('n', $time)-1);
        $russian = array('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
        $russian2 = array('январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь');
        
        $format = preg_replace(array("'M'", "'F'"), array($russian[$month], $russian2[$month]), $format);
        
        return date($format, $time);  
    } 
      
    /**
    * Возвращает время в формате ДД ЧЧ ММ СС 
    * пример: 2 дня 13 часов 12 мин. 56 сек.
    * 
    * @param mixed $time          время в секундах
    * @param mixed $daysWords     массив слов для количества дней ('[1]день', '[2]дня', '[5]дней')
    * @param mixed $hoursWords    массив слов для количества часов ('[1]час', '[2]часа', '[5]часов')
    * @param mixed $minutesWord   сокращение для минут (мин.)
    * @param mixed $secondsWord   сокращение для секунд (сек.)
    * 
    * @return string 
    * @see HString::eclination
    */
    public static function formatTimeInGame($time, $daysWords=array(), $hoursWords=array(), $minutesWord, $secondsWord) 
    {
        $endString = '';
          
        $days     = (int)($time / 86400);
        $hours    = (int)(($time % 86400) / 3600);
        $minutes  = (int)(($time % 3600) / 60);
        $seconds  = (int)($time % 60);

        // days
        $endString .= $days > 0 ? $days . ' ' . HString::declination($days, $daysWords) : '';
        // hours 
        $endString .= $hours > 0 ? $hours . ' ' . HString::declination($hours, $hoursWords) : '';
        // minutes
        $endString .= $minutes . ' ' . $minutesWord;
        //seconds
        $endString .= $seconds . ' ' . $secondsWord;
      
        return $endString;         
    }
    
      /**
      * Форматирует дату в удобочитаемый вид
      * ('j M Y года в H:i' => 27 мая 2011 года в 17:32)
      *  
      * @param int $time время
      * @param string $format  формат
      * @param boolean $cut_year обрезать год
      * @return string
      */
      public static function r_date($time = '', $format = 'j M Y', $cut_year = true) 
      {
        if(empty($time)) 
        {
            $time = time();
        }
        if($cut_year && date('Y') == date('Y', $time)) 
        {
            $format = preg_replace('/o|y|Y/', '', $format);    
        } 
        $month = abs(date('n', $time)-1);
        $rus = array('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
        $rus2 = array('январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь');
        
        $format = preg_replace(array("'M'", "'F'"), array($rus[$month], $rus2[$month]), $format);
        
        return date($format, $time);
      }    
    
}